草庐IT

c++ - 在 C++11 中实现 boost::optional

全部标签

C++11 可选模板类型参数?

如果我想编写一个具有可选类型参数的类,我可以执行以下操作:templatestructX{Tt;};templatestructX{};intmain(){Xa;Xb;};有没有办法写成不需要void?即:intmain(){Xa;Xb;};我试过这个:templatestructX{Tt;};templatestructX{};intmain(){Xa;Xb;};但我得到:test.cpp:Infunction‘intmain()’:test.cpp:16:4:error:missingtemplateargumentsbefore‘b’test.cpp:16:4:error:exp

c++ - 为什么 C++11 允许 GC?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。C++11允许其实现执行(某些)垃圾收集实用程序。为什么标准会允许这样做?我一直认为在C++中,你不用为不用的东西付费。对我来说,(隐含的)GC感觉它破坏了这种意识形态。此外,通过智能指针在C++中编写和使用显式垃圾收集实用程序并不难。其次,GC会使一些原本有效的程序失效。示例包括指针屏蔽和相关的低级指针“hacks”。int*nums=newint[1

c++ - 限制 boost::odeint 集成中的步骤数

假设我有以下boost::odeint代码:#include#include#includeusingnamespacestd;usingnamespaceboost::numeric::odeint;constdoublesigma=10.0;constdoubleR=28.0;constdoubleb=8.0/3.0;typedefboost::arraystate_type;voidlorenz(conststate_type&x,state_type&dxdt,doublet){dxdt[0]=sigma*(x[1]-x[0]);dxdt[1]=R*x[0]-x[1]-x[0]

c++ - Boost::spirit::qi 定义一个 nullaries 的计算器

我正在尝试为数学表达式编写一个解析器,其中命名变量是boost::spirit中的nullaries|(版本1_51_0),我是全新的。我定义typedefboost::functionValue我的规则将这样声明:qi::ruleexpression,term,others,...;我用这个宏在nullaries上定义二元运算符#defineBINARY_FUNCTOR(name,op)\structname\{\name(Valuex,Valuey):x_(x),y_(y){}\doubleoperator()(){returnx_()opy_();}\Valuex_,y_;\};

C++11:私有(private)成员安全

这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个答案)关闭9年前。让我们考虑下一段代码:#include#include"mydemangled.hpp"usingnamespacestd;structA{private:structB{intget()const{return5;}};public:Bget()const{returnB();}};intmain(){Aa;A::Bb=a.get();cout编译器(gcc4.7.2)大声说A::B是私有(private)的。好的。所以,我更改代码:intmain(){Aa;cout它不会大

c++ - 构建 boost C++ WinCE

我知道这是类似的问题,但对我没有帮助。我想在x86平台上为WindowsCE6构建boost。我已经成功构建了STLPortRelease模式作为WINCE的共享库,我还添加了一些补丁并集成了OpenCETime库并实现了一些缺失的ANSIC函数。STLPort测试没问题(只是wcout、wcin和wcerrin_avail()函数的问题,我不知Prop体问题出在哪里)。为了构建boost,我创建了一个批处理文件并以这种方式更改了user-config.jam。构建没问题,但似乎我正在为我的WindowsXp平台而不是WinCE进行编译。boost构建系统非常复杂,我不明白它是如何工作

c++ - 非类名 C++11 类型名是一个简单的模板 ID?

在C++11标准中它描述了type-name和class-name使用以下语法:type-name:class-nameenum-nametypedef-namesimple-template-id我的问题是关于simple-template-id那是type-name的直系后代.有没有可能拥有一个simple-template-id那是一个type-name但不是class-name?例如如果foo命名一个类型,它可以是非类类型吗?(如果答案是否定的,是否有其他原因让我遗漏了为什么simple-template-id在type-name下重复?) 最佳答案

c++ - 如何写入 boost::asio::mutable_buffer?

我有一些代码为我提供了一个指向缓冲区的指针,以及我需要用数据填充的缓冲区的大小。我用boost::asio::mutable_buffer实例表示这个缓冲区,但是我如何正确使用这个缓冲区(例如,向它写入一个字符串,...)并让boost强制执行缓冲区边界?这是一些伪代码:size_tsome_callback(void*ptr,size_t){//thisfunctioniscalledby3rdpartyreturnour_handler(boost::asio::mutable_buffer(ptr,size));}size_tour_handler(constboost::asi

c++ - boost::any 违反了 Liskov 替换原则

我发现不可能从boost::any中提取对基类型的引用它持有派生类型:boost::anyholder=Derived();constBase&base_ref=boost::any_cast(holder);抛出一个boost::bad_any_cast异常。这似乎违反了Liskovsubstitutionprinciple而且不是很方便。有任何解决方法吗? 最佳答案 我不认为它“违反”了它-boost::any并非专为您的使用而设计。它专门设计用于处理值类型(请参阅文档,您已经向其发布了链接)。您必须将any_cast准确转换为

c++ - Boost Log - 为什么不编译?

在过去的三个小时里,我一直被以下编译错误搞糊涂了。谁能告诉我这是怎么回事?我试图将log::formatter(在下面标记)定义为它自己的变量,因此它可以在几个地方重新使用。但是,在尝试重新使用它时出现编译错误。但是,如果我完全摆脱那个变量,而是复制并粘贴代码,它就会编译。有没有搞错?有什么办法可以做我想做的事吗?boost::shared_ptrlogger=log::core::get();logger->set_logging_enabled(enabled);logger->set_filter(trivial::severity>=level);logger->add_glo